{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0",
    "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEWCAYAAACKSkfIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl8VNX9//HXZ5LJvq8EAiTsBGUTFcW1bogKWq3FpZVq1bbWttZ+K36/Xazffrv9WltbbdVad0WpK3Xfd1Q22UF2CCEhC9mTyczk/P44N2EIExIkySQzn+fjkUdm7tyZ+dwLec+Zc889V4wxKKWUigyuUBeglFKq72joK6VUBNHQV0qpCKKhr5RSEURDXymlIoiGvlJKRRANfaWUiiAa+ipsiMi7IrJPRGJDXYtS/ZWGvgoLIlIAnAwYYHYfvm90X72XUj1BQ1+Fi28CnwAPAVe1LRSReBH5k4jsEJEaEflQROKdx04SkY9FpFpEdonIPGf5uyLy7YDXmCciHwbcNyJyg4hsAjY5y+50XqNWRJaJyMkB60eJyH+LyBYRqXMeHyoid4vInwI3QkT+IyI/6o0dpBRo6Kvw8U3gcefnHBHJdZb/ETgGOBHIAH4KtIrIMOAV4G9ANjAZ+Pww3u9C4HigyLm/xHmNDOAJ4N8iEuc89mPgMmAWkAJcDTQCDwOXiYgLQESygDOABYez4UodDg19NeCJyEnAcGChMWYZsAW43AnTq4EfGmN2G2P8xpiPjTEe4ArgTWPMAmOM1xhTaYw5nND/rTGmyhjTBGCMecx5DZ8x5k9ALDDWWffbwM+MMRuNtdJZ9zOgBhv0AHOBd40xZUe4S5TqlIa+CgdXAa8bYyqc+084y7KAOOyHQEdDO1neXbsC74jIzSKy3ulCqgZSnffv6r0eBq50bl8JPHoENSnVJT0IpQY0p3/+UiBKREqdxbFAGpAHNAMjgZUdnroLOK6Tl20AEgLuDwqyTvv0tE7//S3YFvtaY0yriOwDJOC9RgJrgrzOY8AaEZkEjAee76QmpXqEtvTVQHch4Mf2rU92fsYDH2D7+R8A7hCRwc4B1ROcIZ2PA2eKyKUiEi0imSIy2XnNz4GvikiCiIwCrumihmTAB5QD0SLyC2zffZv7gf8VkdFiTRSRTABjTDH2eMCjwDNt3UVK9RYNfTXQXQU8aIzZaYwpbfsB7sL2288HVmODtQr4PeAyxuzEHli92Vn+OTDJec0/Ay1AGbb75fEuangNe1D4C2AH9ttFYPfPHcBC4HWgFvgXEB/w+MPA0WjXjuoDohdRUSq0ROQUbDdPgTGmNdT1qPCmLX2lQkhE3MAPgfs18FVf0NBXKkREZDxQjT3g/JcQl6MihHbvKKVUBNGWvlJKRZB+N04/KyvLFBQUhLoMpZQaUJYtW1ZhjMnuar1+F/oFBQUsXbo01GUopdSAIiI7urOedu8opVQE0dBXSqkIoqGvlFIRpN/16Qfj9XopLi6mubk51KX0uri4OPLz83G73aEuRSkVhgZE6BcXF5OcnExBQQEi0vUTBihjDJWVlRQXF1NYWBjqcpRSYWhAdO80NzeTmZkZ1oEPICJkZmZGxDcapVRoDIjQB8I+8NtEynYqpUJjwIS+UkqFG3+r4dU1pXywqbzP3nNA9On3B9XV1TzxxBN873vfO6znzZo1iyeeeIK0tLReqkwp1duW7ahixc5q0hJiyEh0k5YQw4isRNISYtrX8flbeWdjOXtqmqj3+EiOjSYpLpp6j5/Keg87KxupbfaSn55AekIMTV4/r68rZWt5AwAXTBrM7bMnkJ4Y01kZPUJDv5uqq6v5+9//flDo+/1+oqKiOn3eyy+/3NulKaV6kNffytqSWmqavBxbkM7zK0r4+Qtr8LcePDnl8MwEThyZyZRh6Tz40XbW76kN+poiMDg1nuS4aBZvqaShxU9MlItROUncfflUtpbX89e3N1HT5OWRqzu7imfP0NDvpvnz57NlyxYmT56M2+0mKSmJvLw8Pv/8c9atW8eFF17Irl27aG5u5oc//CHXXXcdsH9aifr6es4991xOOukkPv74Y4YMGcILL7xAfHx8F++slPqyvP5WPtlaSYPHR1Ksm6S4aGKjXWyraGBreT3RUbaH+/Od1Wwsq8Pj9bOv0UuT1w+AO0rw+g2nj83m9xdPpMl5vLLewxdl9azYuY//rNzDgs92MTg1jr9dNoXpIzJJio2mzuOlvtlHUlw0qfFuYqNt49AYg7/VtL93mzOLcoly9f4xvQEX+r/6z1rWlQT/NP2yigan8MsLJhxynd/97nesWbOGzz//nHfffZfzzjuPNWvWtA+tfOCBB8jIyKCpqYljjz2Wiy++mMzMzANeY9OmTSxYsIB//vOfXHrppTzzzDNceeWVPbotSoULYwwV9S1kJcUEHeDQ4mvl1bWlPPLxdjaU1pEa7yY6Sqhv9hHnjmJoRjwbS+vY1+jt8r2GZsRz9JBU4t3RpMRHM3VYOinxbj7cVE5qvJvvnDqyPaSHO3/WZ4zPba9j/Z5aRucmkRCzP1LjY6LIST74vUSE6KiDt2d8XsrBK/eCARf6/cVxxx13wFj6v/71rzz33HMA7Nq1i02bNh0U+oWFhUyebK+9fcwxx7B9+/Y+q1epvlTV0MK2inqmDks/KLA9Pj+byuqpbfaSHOvG4/NTUe9he2UjW/bWU+/x0djiZ/XuGqoaWpg+IoOrZxTy5voyPtlaxbSCdAalxPHvZcWU13kYnpnAV6cOob7Zh6/VkBQXTYPHx86qRk4enc3sSYPJS4ujweOn3uOlscXP8IxERucm4W81+PyG1ITgJ0OeOqbLSSuJiXYxaejAOWY34EK/qxZ5X0lMTGy//e677/Lmm2+yePFiEhISOO2004KOtY+NjW2/HRUVRVNTU5/UqlRf+aKsjqeW7OKJT3fS5PVz8ugsvnPqSD7dWsnyndXsrm5iV1UjviD94wDZybGkxbuJiXZx+tgchqTH89gnO7ju0WXEuV1MH5HJW+v3UtPk5bSx2Vx1QgGnjsnG1QfdIuGiW6EvIjOBO4Eo7LU8f9fh8eHAA0A2UAVcaYwpdh67CviZs+qvjTEP91DtfSo5OZm6urqgj9XU1JCenk5CQgIbNmzgk08+6ePqlDpyNY1elu2sQkTISIhhXF4yzS2tfLi5gqykGI4rzGDdnlp+tWgdNU1eUhPcpMXbfvKaRi/bKhvYWt5AlEuYM3kw4wYlc+ebm7ji/k9xCUwYnEpRXgqzjh5EUV4q6YluGjx+YqJdZCbGMDQ9IWiL+9qTC/l4SyXHF2aQlhCDz99KbbOPjF4e5RKuugx9EYkC7gbOAoqBJSKyyBizLmC1PwKPGGMeFpGvAL8FviEiGcAvgWmAAZY5z93X0xvS2zIzM5kxYwZHHXUU8fHx5Obmtj82c+ZM7rnnHiZOnMjYsWOZPn16CCtVqnvqmr2U1XoozEpkQ2kt1z2yjN3V+799uqOEVkP7qJVxg5LZUl5PWkIMxwxLp7qphZ1VjdQ1+0iJd1OQmci8EwuYedQgcpLjADhv4mA+31nN9BEZZCbFBq2jK8lxbs6ZMKj9fnSUSwP/CHR5jVwROQG4zRhzjnP/VgBjzG8D1lkLnGOMKRbbgVdjjEkRkcuA04wx1zvr3Qu8a4xZ0Nn7TZs2zXS8iMr69esZP378l9rAgSjStlf1nNZWQ3WTl/I6D3vrmimv87T/VDd5qW70UtPUQnmd7UMHSIqNxutvJSMxht9cdDRpCW5Ka5pZtbsGt0s4dWw2G0vrefSTHYzOSeJXfTCWXB0+EVlmjJnW1Xrd6d4ZAuwKuF8MHN9hnZXAxdguoIuAZBHJ7OS5Q4IUex1wHcCwYcO6UZJSkaOm0UtcjIuYKBcNLX78rYaUuGhqm3y8unYPtU0+pgxLY1VxDf/8YCt7ag4+nhTndpGREENqQgxp8W4mDE7l4qn5DEqNY2VxNc3eVm6ZOY7s5P2t8XOPzmu/fczwDC4/Xv82w0F3Qj/YEZKOXw9+AtwlIvOA94HdgK+bz8UYcx9wH9iWfjdqUios7a5u4u31ZQxOiyc5zs3f3t7EB5sqAIhySXtXS1JsNC2+Vlr8rQc8//jCDK47ZQQ5yXFkJ8e2/yTGRHU6r9PXpg3t3Y1S/Up3Qr8YCPxfkQ+UBK5gjCkBvgogIknAxcaYGhEpBk7r8Nx3j6BepQYsYwx76zysK6nF4/OTFOtmZ1Ujq3fXUNPUQlVDC59tqyJwYEtagpsfnDGamCihyesnJc6NCJRUNxMT7eKCiXY44rId+8hOjmXqsPTQbaAaELoT+kuA0SJSiG3BzwUuD1xBRLKAKmNMK3ArdiQPwGvAb0Sk7X/i2c7jSoUdf6uhocVHSpwdgdLs9fP2hr28uKqENbtrqaj30NjiP+h5aQluspNiiY+J4nunjeLCKUOoamiheF8jZxbltr/eoQQe6FRHYNVC+Oiv8O03wH0YZ8sbY+da+LKaqqFsDUTHQX6X3fJHpMvQN8b4ROT72ACPAh4wxqwVkduBpcaYRdjW/G9FxGC7d25wnlslIv+L/eAAuN0YU9UL26FUn6qo9/DMsmLeXF+G2zlTc3VxDfUtPk4dk82Y3GT+vXQX+xq9ZCXFcMLILHKSY8lPj6coL4XkODe1zV7yUuMYlpEQtOvluMKMvt6svuN3zpKN6sYV4nZ+Ai/cABO/DtO/B7FJ3XuPqm1QvhH8LdDqte/ZXAueWohNhuRBMGYmRMfur+mt26FmF6xbBJO+fuDr1ZXCp/eAaYXxs6F6J6x5BsrW2uekDoX8Y2Hat2D4iQc+t3ILbHwZaoph1JlQeIp9393L4bX/hp2L7Xrjzoe5j3dv+76kLkfv9DUdvRN529vfbato4O0Ne9m9r4nKBts9s7m8HmNgYn4qsdEuWnytTBiSSkqcm2eXF1Ne7+Gs8bl844ThnDgyq0/mVOlztSWQmANR0bD5LXjxJjjlJzD1m/vXadoHOz4GT71dL70Adi2BD/5kQ3feSxAXMP2Ap94+p9UHacOhuRruOcmGdUsdxKZC9ljIGQ/HXw+5nZysueFlePpb4OvigkQZI+G8P8LIr8CKx+yHizsRBk+Bb71k1/F54N3fwSd/tx8M4rIfIgDJg2HYdEjNh33b7LY2VsLIM2DO3ZCSBx/cAW/9yq4fFQt+j32NxByoL4PEbDjuWhg8FfImQlLOl/rn6MnRO+pLSEpKor6+PtRlqMNQvK+RBz/aTk2Tl1PGZFNW08zTy4rZWGZPykuMiSI9MYYxucmcP3Ew500cxKggk6vcfPYYGj3+Tk/t7xO1eyA+HdxxtpX50Z1w7DWQNyn4+oHdEyWfQ+1uGHfe/sdbGmy3R+4EKJoN61+Ehd+wQXXi9+H5G2wLeNGNtmVeeArs2wGL7wZPzcHvl38clCyHp660LduaYlhyPyx/1IYiQOZouw31e213i98HKx6xLfg1z8Dyh+32eOoBA5mjIGWw3ZYVj9nHzv297aZxue23itgU28pvaYDdS+HV+fDoRTDhq7Dnc/ucojm2xV+x2Yb7M9dC2Wr7TeO0+bamTW9CUjYUnAyugFl2Wxph6b/sh8RD58H079rAL7oQzrodknJh23tQvNR+aKYMhhNvPPCDr5dpS7+XHEnoD8TtHQiMMXj9hg2ltfz1rU18tq2KcYNSyE2NY/e+RlYW1+ASSIyNptqZpGvKsDTmTBrMmUW55Kcn9E5hpashvTB4t4UxtuWYmGXvt7baQG7aBxhIzoMdH8GHf4GGCsgabbsaKjfbcBpzLqx7HryNEJcGVy0CV7TtThh9tg3BV34KW9+Dr94HMUnw8AXgbYCZv4PjvwNb3oaXbrYtWYBJl8GaZyFzpK2luca2yr/1Cnx2r/1waBukN/Y8+6GQmGPDvGqb3ZZh0+HzJ+D57+7fVpcbJs2FocfZ1vXKBbB7GZzzWzihw3UsGqtsV8vOxZCQZT9wKrfYlrO3EQpPtdvTVVeQtxk++ottjfs9cOmj9v3vKIIhx8CelfZDYs5dMPbc7v+b7vwUHrvYfjsZcgzMe9l+APei7rb0NfS76ZZbbmH48OHt8+nfdtttiAjvv/8++/btw+v18utf/5o5c+YAGvqhtq+hhXve30J2UixjByXz9LJiXl69B6/f/n9PjXdzVlEuW8vrqahvYUhaPBOHpjLvxAJykuNYVVxNcpybUTkdQqO2BMrWQfV2ez86zgZvYrZtkfqaYeTpIFE2AOtK4cxfQbRzMlNNsQ3MKLft9/3kHlj5hG2lXvoIVG21YZg2zHYZrHgMyjdA7lG2Fbr5LagvPXiDM0fbLomKjTZgC0+xLdkNL9kAPOW/4NlrbT1tXRPish8EzTW2xVlbAjGJ9sMipwi+eAVSh0HNThvqF/zFtvCX/guyxsLVr9qA/eQf9ltExgj7us019gNIXJBReHCtgdYtstuXMgRGnGq3+YD9vcd2kfS2yi32A2TS5eBywYLLbB/8mJkw+29frsuleKndN2f/uk+2IXxD/5X5tmXUkwYdDef+7pCrrFixgh/96Ee89957ABQVFfHqq6+SlpZGSkoKFRUVTJ8+nU2bNiEiGvp9bGt5PXe+tYnMxFjOGJ/Dz59fw7bKBtr+eyfGRHHR1CHkpcaTGu9m9uTBwUfFrHgc6vbASTcd+LW9tgTe+T8byKb14OcFcifar+t1e+z9cefDqbfAO7+BL17lgFNVJAqmXQ3rXoCGvXZZcp4dzeFrgkETYews29ou3wAjTrM/ic7sj3WlNlDGzjqw3jZ+n+1LB9vKfvOXMOwEKDjJfviUrbG1ZY2xre49q+y3gdR8eOH7UL3D9tFPuGj/aJat79kPhaSuZ6AcsGpLbCt/zMwjG5XTh7RPv4dNmTKFvXv3UlJSQnl5Oenp6eTl5XHTTTfx/vvv43K52L17N2VlZQwapMPnepMxhuU79/HEp7vYW9dMclw0b67bS0y0C4/PzwMfbSMtwc3C609gcGocO9Yv4ajRI0nJHAy1xVBfDpIJuG03gSvahnRtCbz0Y9taL14CF99vv9pvenP/QcHjvwvjL7AHJF1RtqVbsxsaK2x/rb/FDvurLYGL7rVB/cpPYcOL9iDkqT+13SMA2z+EwZNto+Pkm+Hd38DwGXDUJYCxr5E2zIbO6V9ypHNUwJ94RqH9NtFm0NEHrjv3cdt95HIu7vHVe4O/5ohTv1wtA0nKYPsThgZe6HfRIu9Nl1xyCU8//TSlpaXMnTuXxx9/nPLycpYtW4bb7aagoCDolMrqy2vx2Ssffb6rmvI6D7v2NbJ+Ty1ltR6SYqMZmZOEt3wz/zd0M+fnlNMak8KypkGMy88mp/QpeOkhhpRvgNex3Q3trXSB+DTbNx6TDPP+A8seglY/nDof3v9/tl932Amw+Q17APPSR/Z3YQRKLzjwfuEp+2+PONX2k1d8ATN+CAkBwzADuz5S8mw3wgGvO/zL77gvy+Xqeh01oA280A+huXPncu2111JRUcF7773HwoULycnJwe12884777Bjx45Ql9j/1e6x/dltByYDtDTUUPnB/eyOHso632BKt61nT2kJ73jG0oqLb8e/wznR23EnpJI4bDijJs0gbvsrdhRHaStUp4G3kVP8LbDWedFBR8P5f7FD7er22CBNyLT98nV7bIh/9k970K2pGo79tm1VjzrTvu6mN+xojtl3dX98eEdTrvjy+0upHqahfxgmTJhAXV0dQ4YMIS8vjyuuuIILLriAadOmMXnyZMaNGxfqEvsvY+DTe+H1/8EYQ3nODJannsGHruMpa3FTXd/E90p/zumuFeRh5+IGQMDEuyA6DvE2Qsoo8O6ALa/B5nts18xx19lRJukFdnx31TYwfntQMnVo8D7Z8Rfsvz12Fjxwtj1Z5pSf2GVDj7U/SoUZDf3DtHr1/oPIWVlZLF68OOh6ETlG39cCqxfa0C2abQ9CikDlFupfvJWkba+xMfUkPq7N5qzSD5hZ9j6nEcMn7uOJiormZNcK1k68lYT8oxnUsov4QaMhJgnZ/IYdDXLsNfv7oVsa7AH95LwDu0Gi3JA95vDqzhoF175t+/e/5IkxSg0UGvrq0IyB0lW2W8bbAIMm2fHZIjbk1zwNG1+xBzBLV9tx2wh88Ee8cZnsi8oko2ELLhPNb3yX8UjlBZw8JpeRx/+enJjNxK17ltPWPmfHoh//XSacO//gGoZ1nMkb24of1oMXq0kvOLhvXqkwpKGvDla21s4JUvEFrP/P/pNy2iTn2bHcDeXQUI5JHUpjdCo1sSMoPeV2VrUWUrr4KQrqN5Ij1TQmn0/DsT/gsqPHc0tGQsCUBLlQOMOeBFS21n4zUEr1qgET+saYTucDDychOW/CU28npqrZBSsehc1v2uUSBQUz7Ik9OeMgKgbv9k/Zu+59Yk0zJIzgxZzT+OuO4VQ5Z7DaS+aUcuLIrzJx+nCOGZnV9XQEUW47dFEp1esGROjHxcVRWVlJZmZmWAe/MYbKykri4nr4dG1j7FmS8Wn2/p6V9kzNnPF2fpHFd9mJrcCObDnjl/ZknNSh7eO8jTG8uX4vt78/gl1V+88ujHO7OLsom7OKcpmYn0p1o5eEmChG5x48J41SKvQGROjn5+dTXFxMeXl5qEvpdXFxceTn53e9YncZY08OWvIv+NqDMHQ6PP41O0dJm7GzYMqV9izMrDEHzSO+tbye219cx7sbyxmdk8QD86YR746mrtnLiaOySIrd/99oeGbPla6U6nkDIvTdbjeFhV3M4aGsxiob6J56iEmA1U/DZ/fZ0/af+bYN9eZauPYdezA2Ot523ThWFVez4LPNlFQ34fW3sq2igT01zSTFRvOz88Zz1YkF7fPHK6UGngER+ipAW59/x26uulI7N8yKxw6eG2bqN+2kXw+db+daueg+GDKVvXXNbNhTh6umgjUlNfxnZQlrS2pt90xOEtFRLo4vzGDC4FTmTB5MTkrvzhKolOp9GvoDia8FnrzMzrQYHWeHMs74oZ2//OO/2bNOj7sOhh5vT/33Ntjpaseea+eJmfci7FnJ3pwTuOuFNTy5ZBctvv0fEJPyU/nlBUVcfEx+ty7Rp5QaeDT0+6umfbB3vZ2Lu+1ybm/8wo6smXaNHfGy5ll7AQiwF4E44+dB54YxxlBe10x6QhqftB7FTXd+QE2Tl4un5jNn8hBcAoPT4hma0UvzxSul+g0N/f6i7eIYqfl2OttHLrTj42NTofBk23Jf9aSd5bFt0rkzb7Pj6DNH2g+HDmoavby6dg8PfrSdDaV1uARaDYzOSWLBtdN1hI1SEUhDvz+o3wvPXW/nTE/Jt2e3+lvggjtt103xUjvX+piZ9pJrbdzxMPHSg17u062V3PHGFyzdsQ9/q2HcoGT+e9Y46pt9uKNcXHNyIQkx+k+vVCTSv/xQq9gED84CT62dU71snQ342XdBbhEcM69bL7OupJaVxdV8uLmCl1btYUhaPN89dSSnj8th6rC0sD6/QSnVfRr6oVC7Z//EXs9/z7bqr33bztl+mL4oq+MPr27gzfX2qkuJMVHccPpIvn/6aOJjglxJSSkV0TT0+9qGl+DJKyD/WBh+AhR/Bhfec9iBv7u6ib+88QXPLC8mMSaa/zpnLLMnDWZIWjwul7bqlVLBaej3tsYqeGSOvWjI0Zfay/Flj7UXsC7+DEadBZPmduuljDG8uqaUxz7dwcdbKnG7XFw9o5AbTh9FemJML2+IUiocaOj3Bm+TM9dNOjx1pZ3MrHa3PVCbOgy+uche7GPJ/XD89Ye88HJlvYct5Q3UNnl5ePF2PthUwbCMBG48fRSXHjuU/HQdZqmU6j4N/Z5WsRkevgDqSuzkZY2VcPG/YPTZsOopGPkVSM616575y05f5sVVJfz9nS2s21Pbviw5NppfzZ7AldOHB0xPrJRS3aeh35P2brCBb1rhKz+H3cug4GQ4+hL7+HHXdvkSLb5WfvPyeh76eDvj81L4ydljmJifRmq8m4LMxK6nKVZKqUPQ0O8ppWts370rCq566YBJzLr9EjXN3PDEcpbt2MfVMwq5ddY4ndxMKdWjNPR7wp6VNvDdCXCVc4bsYWjw+Hh2eTF3vrWJxhY/d10+hfMnDu6lYpVSkUxD/0jV7IbHL7XTJMx78bCus7qzspGHF29n4dJd1DX7mDw0jT9+bSKjcnR6BKVU79DQPxKeOlgwF1oa4JrXDyvwX1tbyg2PLwfg3KPz+NaMAqYM1TNnlVK9S0P/y2iohHd/A6v/bYP/sqfslAnd9OnWSm5csIIJQ1K598pjGJSq89QrpfqGhv7h8vtg4TegeAkUzYFjvw3Dpnfrqc1ePw99vJ2/vbWJ/PR4Hpx3LBl6UpVSqg9p6B+ud34NOz6yV5+a9PVuPcXfanhmWTF/fvML9tQ0c/rYbP7voqM18JVSfa5boS8iM4E7gSjgfmPM7zo8Pgx4GEhz1plvjHlZRNzA/cBU570eMcb8tgfr71sbX4UP/2xnvuxG4O+ubuLppcU8t6KY7ZWNTBqaxh2XTuaEkXr1cKVUaHQZ+iISBdwNnAUUA0tEZJExZl3Aaj8DFhpj/iEiRcDLQAHwNSDWGHO0iCQA60RkgTFmew9vR+/bt8POeT9oIsz8fZerL1pZwvxnVtHY4uf4wgxumTmOmUcN0gO1SqmQ6k5L/zhgszFmK4CIPAnMAQJD3wApzu1UoCRgeaKIRAPxQAtQy0BTUwz/nmcvSn7pw+Du/MCrMYbfvrKB+97fyrTh6dxx6WSGZer8OEqp/qE7oT8E2BVwvxg4vsM6twGvi8iNQCJwprP8aewHxB4gAbjJGFPV8Q1E5DrgOoBhw4YdRvm9rLnWtu6/eNXev/TRoNegbWOM4ZeL1vLI4h18Y/pwfnFBkZ5Rq5TqV7qTSMH6I0yH+5cBDxlj8oFZwKMi4sJ+S/ADg4FC4GYROSg1jTH3GWOmGWOmZWdnH9YG9KpXfgpfvAYn/Rh+sALGn9/pql5/K/OfWc0ji3dw/SkjuH3OBA18pVS/052WfjEwNOB+Pvu7b9pcA8wEMMYsFpE4IAu4HHjVGOMF9orIR8A0YOuRFt7r1jwLKxfAqfPh9FsPuWpts5cbHl9mr922AAAXPElEQVTOB5sq+MEZo7npzNHad6+U6pe60xRdAowWkUIRiQHmAos6rLMTOANARMYDcUC5s/wrYiUC04ENPVV8r9mzCl78EQyZBqf85JCrLt5Syaw7P2Dxlkr+cMlEfnzWGA18pVS/1WXoG2N8wPeB14D12FE6a0XkdhGZ7ax2M3CtiKwEFgDzjDEGO+onCViD/fB40Bizqhe2o+cUL4OHz4fYFLjkXxDV+VTGj36yg8v++QnRLuGp66dz6bShna6rlFL9gdhs7j+mTZtmli5dGpo3b6qGOydBfJqdLTOt84PKy3bs4+v3LuaUMdncdfkUEmL0PDelVOiIyDJjzLSu1tOkCvTJP6C5usvAr6z38P0nlpOXFsefvz5ZA18pNWBoWrVpqrahP+58yJvY6WpVDS1c+a/PqGxo4ZnvnEhqvF7JSik1cGjot/n0XvDUwKm3dLpKdWMLl//zE7ZVNHD/N6dxdH5qHxaolFJHTkMfoK4UFt/VZSv/f19cz+a99Tx89XHMGJXVhwUqpVTP0LOHAF6dDz4PnHV7p6ss3lLJM8uLue6UERr4SqkBS0N/0xuw9jk45b86vbatx+fnZ8+vZmhGPDd+ZXQfF6iUUj0nsrt3Wv22lZ81Bmb8IOgqxhh++cJatpQ38OC3jiU+JqqPi1RKqZ4T2aG/fhFUboavPQzRsUFXeejj7Ty5ZBc3nD6S08fm9HGBSinVsyK3e8cY+OAOyBwF4y8Iusrnu6r59UvrOasol5vPGtvHBSqlVM+L3NDf8haUroIZPwLXwV02Lb5Wbnl6FdlJsfzp0km4XDqfjlJq4Ivc7p3Fd0PyYJgY/LKH/3h3CxvL6rj/m9NIidMTsJRS4SEyW/oNFbD1XZh8GUQffHHy1cU13PXOJi6YNJgzi3L7vj6llOolkRn66xeBaYUJFx30UE2TlxueWE5WUiy/mj0hBMUppVTviczunbXP2QO4uUcdsNgYw/xnVlFS3cRT108nI/HgbwFKKTWQRV5Lv74ctn9oW/kdLnby2toyXllTyo/PHsMxwzNCVKBSSvWeyAv9Trp2Glt8/O+L6xg3KJnrTu784udKKTWQRV73ztrn7Bm4OUUHLL77nc3srm5i4fUnEK0XNFdKhanISre6Mtjx0UFdO/saWrj/g21cOHkwxxVqt45SKnxFVuh30rWzYMlOPL5WvnvaqBAVppRSfSOyQn/t85A9DnLGty/y+Vt5dPEOThyZydhBySEsTimlel/khH5d6f6unQCvrytjT00z804sCE1dSinVhyIn9NctAgwUXXjA4kcWb2doRjxnjNczb5VS4S9yQn/7+5A2HHLGtS+qqPfw2bYqLpqST5ROqKaUigCRE/rFyyD/2AMWvb1+L60GzpmgrXylVGSIjNCvLYG6EsifdsDi19eVMiQtnqK8lBAVppRSfSsyQn/3Mvt7yDHtixo8Pt7fVMHZE3IR0a4dpVRkiJzQd7lh0MT2RR9sKqfF18rZRYNCWJhSSvWtyAj94qUw6Chwx7Uvem1tGWkJbo4tSA9hYUop1bfCP/Rb/VCy4oCunaYWP6+vLeWcokE6z45SKqKEf+JVfAEt9TBk/0HcN9aX0dDiZ86UwSEsTCml+l74h37bQdyAkTsvrNhNXmoc0wszQ1SUUkqFRviH/t71EB0HGSMBqGpo4b0vypk9aTAuPSFLKRVhwj/0q7ZBxghw2U19aVUJvlbDnMlDQlyYUkr1vW6FvojMFJGNIrJZROYHeXyYiLwjIitEZJWIzAp4bKKILBaRtSKyWkTiOj6/V1VttaHveGvDXkZkJzI+T2fUVEpFni5DX0SigLuBc4Ei4DIRKeqw2s+AhcaYKcBc4O/Oc6OBx4DvGGMmAKcB3h6rviutrbBvG2QUOncNy3fs4/jCDD0hSykVkbrT0j8O2GyM2WqMaQGeBOZ0WMcAbXMZpAIlzu2zgVXGmJUAxphKY4z/yMvuproS8DW3t/S3lNdT2+xj6jAdm6+UikzdCf0hwK6A+8XOskC3AVeKSDHwMnCjs3wMYETkNRFZLiI/DfYGInKdiCwVkaXl5eWHtQGHVLXV/nZCf9mOfQAcM1xDXykVmboT+sH6QUyH+5cBDxlj8oFZwKMi4sJeeP0k4Arn90UicsZBL2bMfcaYacaYadnZ2Ye1AYcUJPTTE9wUZiX23HsopdQA0p3QLwaGBtzPZ3/3TZtrgIUAxpjFQByQ5Tz3PWNMhTGmEfstYOqRFt1tVVshKgZS7BeTZTv3cczwdO3PV0pFrO6E/hJgtIgUikgM9kDtog7r7ATOABCR8djQLwdeAyaKSIJzUPdUYF1PFd+lqq2QXgCuKPY1tLC1vIEp2p+vlIpg0V2tYIzxicj3sQEeBTxgjFkrIrcDS40xi4CbgX+KyE3Yrp95xhgD7BORO7AfHAZ42RjzUm9tzEGqtrWflLVil/bnK6VUl6EPYIx5Gds1E7jsFwG31wEzOnnuY9hhm33LGNvSLzwVsP35US5hUn5an5eilFL9RfiekVtfBt7G9jH6q4prGJObTHxMVIgLU0qp0Anf0K/cYn9njMAYw9qSWo4eopdFVEpFtjAO/c32d8YI9tQ0U9XQwlFDUkNbk1JKhVj4hn7ZWnAnQtpwVu+uAdDQV0pFvPAO/dwicLlYu7sGl8D4Qdq9o5SKbOEZ+sZA2WrIPQqA1btrGJ2jB3GVUio8Q7+mGJpr7MXQgTUltdq1o5RShGvol621v3OPoqy2mfI6D0fpyB2llArX0F9tf+dOYI1zEPdobekrpVSYhn7pGjvnTmwy60pqARifpy19pZQKz9AvW9t+EHdrRQODU+NIjO3WjBNKKRXWwi/0WxqhassBoT8iOynERSmlVP8QfqG/dz2YVhh0FMYYtpbX60VTlFLKEX6hX+Nc2TG9gMqGFuqafYzI1tBXSikIx9D32AO3xKWxtbwBQFv6SinlCL/Qb7ZDNIlLZVtFPQAjtU9fKaWAcA19cUFMElsrGoiJcjE4LT7UVSmlVL8QnqEfmwwuF1vLGxiemUCUSy+ErpRSEJahXwtx9uzbbRUNehBXKaUChGHo10BcKj5/KzsqGyjM0v58pZRqE6ahn8bu6ia8fqMtfaWUChCmoZ/aPlxzhA7XVEqpduEZ+rEp7NrXCMCwzIQQF6SUUv1H+IW+xx7ILattJsolZCXGhroipZTqN8Ir9Fv9AaHvISc5FpcO11RKqXbhFfrtUzDYln5OSlxo61FKqX4mvEI/YAqGvbUecpO1a0cppQKFaeinUFbXTK629JVS6gBhFvq2e6clOpnqRi+5KdrSV0qpQGEW+ralX+W3E6xpn75SSh0oLEO/zGvDXrt3lFLqQGEZ+qWeGADt3lFKqQ7CK/SdIZu7m9wA5CZrS18ppQKFV+g310BMMmV1XmKiXKQluENdkVJK9SvdCn0RmSkiG0Vks4jMD/L4MBF5R0RWiMgqEZkV5PF6EflJTxUelDPZmj0xKxYRPRtXKaUCdRn6IhIF3A2cCxQBl4lIUYfVfgYsNMZMAeYCf+/w+J+BV4683C60h76HQXoQVymlDtKdlv5xwGZjzFZjTAvwJDCnwzoGSHFupwIlbQ+IyIXAVmDtkZfbhbbQ1xOzlFIqqO6E/hBgV8D9YmdZoNuAK0WkGHgZuBFARBKBW4BfHeoNROQ6EVkqIkvLy8u7WXoQTujvrfWQoyN3lFLqIN0J/WAd46bD/cuAh4wx+cAs4FERcWHD/s/GmPpDvYEx5j5jzDRjzLTs7Ozu1B1ccw1edxL1Hp+29JVSKojobqxTDAwNuJ9PQPeN4xpgJoAxZrGIxAFZwPHAJSLyByANaBWRZmPMXUdceTDNNTS67DVxdYy+UkodrDuhvwQYLSKFwG7sgdrLO6yzEzgDeEhExgNxQLkx5uS2FUTkNqC+1wLfGPDUUoe9PKKO0VdKqYN12b1jjPEB3wdeA9ZjR+msFZHbRWS2s9rNwLUishJYAMwzxnTsAupdLfVgWqkXG/op8TpGXymlOupOSx9jzMvYA7SBy34RcHsdMKOL17jtS9TXfc4UDE1O906cO6pX304ppQai8Dkjtz30bUs/zh0+m6aUUj0ljJJRYMgx1ERnAhAbrS19pZTqKHxCP7cIrn2b4qSJgLb0lVIqmLBLxmavH9CWvlJKBRN2oe/xteIScEfpZGtKKdVR2IV+s9dPnDtKZ9hUSqkgwi/0fX5io8Nus5RSqkeEXTp6vK06Rl8ppToRdqHf7GvVlr5SSnUi7NLR4/TpK6WUOljYhX6zr5VYDX2llAoq7ELf49UDuUop1ZmwS8dmnx7IVUqpzoRd6Hu8fuK0pa+UUkGFXTp6tE9fKaU6FXah36wtfaWU6lTYpaNt6YfdZimlVI8Iu3S0LX3t3lFKqWDCKvSNMe0TrimllDpYWIW+r9XQatBx+kop1YmwSse2C6hoS18ppYILq9D3+FoBvVSiUkp1JqzSUS+VqJRShxZmoW9b+jpkUymlggurdPT4tKWvlFKHElah39bS1z59pZQKLqzSsa2lr6N3lFIquPAK/bY+fR2nr5RSQYVVOuo4faWUOrSwCv22cfra0ldKqeDCKh21pa+UUocWVqG//4xcDX2llAomrEJ//xm5YbVZSinVY8IqHfeP09eWvlJKBdOt0BeRmSKyUUQ2i8j8II8PE5F3RGSFiKwSkVnO8rNEZJmIrHZ+f6WnNyCQx+fHHSVEuaQ330YppQas6K5WEJEo4G7gLKAYWCIii4wx6wJW+xmw0BjzDxEpAl4GCoAK4AJjTImIHAW8Bgzp4W1o1+xt1SkYlFLqELrT0j8O2GyM2WqMaQGeBOZ0WMcAKc7tVKAEwBizwhhT4ixfC8SJSOyRlx2cx+fXKRiUUuoQupOQQ4BdAfeLObi1fhtwpYgUY1v5NwZ5nYuBFcYYT8cHROQ6EVkqIkvLy8u7VXgw2tJXSqlD607oB+sgNx3uXwY8ZIzJB2YBj4pI+2uLyATg98D1wd7AGHOfMWaaMWZadnZ29yoPotnn12mVlVLqELqTkMXA0ID7+TjdNwGuARYCGGMWA3FAFoCI5APPAd80xmw50oIPxeNtJU5b+kop1anuhP4SYLSIFIpIDDAXWNRhnZ3AGQAiMh4b+uUikga8BNxqjPmo58oOzqMtfaWUOqQuE9IY4wO+jx15sx47SmetiNwuIrOd1W4GrhWRlcACYJ4xxjjPGwX8XEQ+d35yemVL0Ja+Ukp1pcshmwDGmJexB2gDl/0i4PY6YEaQ5/0a+PUR1thtzT4/mYkxffV2Sik14IRVX4hHR+8opdQhhVXoN+s4faWUOqSwSshmr19b+kopdQhhFfoeX6u29JVS6hDCKiGbvX6dYVMppQ4hbELfGIPH16pz6Sul1CGETUK2+FsxBmK1pa+UUp0Km9Bvu4CKtvSVUqpzYZOQHp9eFF0ppboSPqGvl0pUSqkuhU/o+/Si6Eop1ZWwSUi9KLpSSnUtbEI/MTaa847OIy81LtSlKKVUv9WtWTYHgsKsRO6+Ymqoy1BKqX4tbFr6Simluqahr5RSEURDXymlIoiGvlJKRRANfaWUiiAa+kopFUE09JVSKoJo6CulVAQRY0yoaziAiJQDO47gJbKAih4qpydpXYenv9YF/bc2revw9dfavkxdw40x2V2t1O9C/0iJyFJjzLRQ19GR1nV4+mtd0H9r07oOX3+trTfr0u4dpZSKIBr6SikVQcIx9O8LdQGd0LoOT3+tC/pvbVrX4euvtfVaXWHXp6+UUqpz4djSV0op1QkNfaWUiiBhE/oiMlNENorIZhGZH8I6horIOyKyXkTWisgPneUZIvKGiGxyfqeHqL4oEVkhIi869wtF5FOnrqdEJCZEdaWJyNMissHZdyf0h30mIjc5/45rRGSBiMSFap+JyAMisldE1gQsC7qPxPqr8/ewSkR67QpDndT1/5x/y1Ui8pyIpAU8dqtT10YROacv6wp47CciYkQky7kf0v3lLL/R2SdrReQPAct7dn8ZYwb8DxAFbAFGADHASqAoRLXkAVOd28nAF0AR8AdgvrN8PvD7ENX3Y+AJ4EXn/kJgrnP7HuC7IarrYeDbzu0YIC3U+wwYAmwD4gP21bxQ7TPgFGAqsCZgWdB9BMwCXgEEmA582sd1nQ1EO7d/H1BXkfP3GQsUOn+3UX1Vl7N8KPAa9iTQrH6yv04H3gRinfs5vbW/ev0/al/8ACcArwXcvxW4NdR1ObW8AJwFbATynGV5wMYQ1JIPvAV8BXjR+Q9eEfDHecB+7MO6UpxwlQ7LQ7rPnNDfBWRgLy36InBOKPcZUNAhLILuI+Be4LJg6/VFXR0euwh43Ll9wN+mE74n9GVdwNPAJGB7QOiHdH9hGxJnBlmvx/dXuHTvtP1xtil2loWUiBQAU4BPgVxjzB4A53dOCEr6C/BToNW5nwlUG2N8zv1Q7bcRQDnwoNP1dL+IJBLifWaM2Q38EdgJ7AFqgGX0j33WprN91J/+Jq7GtqIhxHWJyGxgtzFmZYeHQr2/xgAnO92G74nIsb1VV7iEvgRZFtKxqCKSBDwD/MgYUxvKWpx6zgf2GmOWBS4Osmoo9ls09uvuP4wxU4AGbFdFSDn943OwX6sHA4nAuUFW7Y/jnvvFv62I/A/gAx5vWxRktT6pS0QSgP8BfhHs4SDL+nJ/RQPp2K6l/wIWioj0Rl3hEvrF2H66NvlASYhqQUTc2MB/3BjzrLO4TETynMfzgL19XNYMYLaIbAeexHbx/AVIE5FoZ51Q7bdioNgY86lz/2nsh0Co99mZwDZjTLkxxgs8C5xI/9hnbTrbRyH/mxCRq4DzgSuM0zcR4rpGYj/AVzp/B/nAchEZFOK6cN7/WWN9hv02ntUbdYVL6C8BRjujKmKAucCiUBTifDr/C1hvjLkj4KFFwFXO7auwff19xhhzqzEm3xhTgN0/bxtjrgDeAS4JVV1ObaXALhEZ6yw6A1hHiPcZtltnuogkOP+ubXWFfJ8F6GwfLQK+6YxKmQ7UtHUD9QURmQncAsw2xjR2qHeuiMSKSCEwGvisL2oyxqw2xuQYYwqcv4Ni7KCLUkK8v4DnsQ0xRGQMdjBDBb2xv3rrQEVf/2CPvn+BPbr9PyGs4yTs169VwOfOzyxs//lbwCbnd0YIazyN/aN3Rjj/iTYD/8YZPRCCmiYDS5399jz2q27I9xnwK2ADsAZ4FDuKIiT7DFiAPbbgxQbWNZ3tI2y3wN3O38NqYFof17UZ2xfd9jdwT8D6/+PUtRE4ty/r6vD4dvYfyA31/ooBHnP+ny0HvtJb+0unYVBKqQgSLt07SimlukFDXymlIoiGvlJKRRANfaWUiiAa+kopFUE09JXqQSJymjgzmCrVH2noK6VUBNHQVxFJRK4Ukc9E5HMRuVfsdQbqReRPIrJcRN4SkWxn3cki8knA3PBtc9aPEpE3RWSl85yRzssnyf5rAzzunM2rVL+goa8ijoiMB74OzDDGTAb8wBXYCdWWG2OmAu8Bv3Se8ghwizFmIvZszbbljwN3G2MmYefkaTttfwrwI+xc6COw8x4p1S9Ed72KUmHnDOAYYInTCI/HTlTWCjzlrPMY8KyIpAJpxpj3nOUPA/8WkWRgiDHmOQBjTDOA83qfGWOKnfufY+dO/7D3N0uprmnoq0gkwMPGmFsPWCjy8w7rHWqOkkN12XgCbvvRvzPVj2j3jopEbwGXiEgOtF9ndjj276Ft9szLgQ+NMTXAPhE52Vn+DeA9Y6+RUCwiFzqvEevM165Uv6YtEBVxjDHrRORnwOsi4sLOdngD9uItE0RkGfYqWV93nnIVcI8T6luBbznLvwHcKyK3O6/xtT7cDKW+FJ1lUymHiNQbY5JCXYdSvUm7d5RSKoJoS18ppSKItvSVUiqCaOgrpVQE0dBXSqkIoqGvlFIRRENfKaUiyP8Hh5kZq6vS8ggAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#!/usr/bin/env python\n",
    "# coding: utf-8\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from keras.models import Sequential\n",
    "from keras.layers.core import Dense, Dropout, Activation, Flatten\n",
    "from keras.layers.convolutional import Conv1D\n",
    "from keras.layers import AveragePooling1D\n",
    "from keras.utils import np_utils\n",
    "from keras.optimizers import Adam\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from contextlib import redirect_stdout\n",
    "from keras.callbacks import EarlyStopping, ModelCheckpoint\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from keras.wrappers.scikit_learn import KerasClassifier\n",
    "\n",
    "\n",
    "def get_data():\n",
    "    data = pd.read_csv(\"/kaggle/input/train-cnn/p2pData.txt\", sep=\" \", header=None)\n",
    "    label = pd.read_csv(\"/kaggle/input/train-cnn/p2pLabel.txt\", sep=\" \", header=None)\n",
    "    data_columns = data.shape[1]\n",
    "\n",
    "    for i in range(0, data_columns):\n",
    "        if data[i][0] != data[i][0]:\n",
    "            del data[i]\n",
    "\n",
    "    data_columns = data.shape[1]\n",
    "    data.columns = np.arange(0, data_columns)\n",
    "\n",
    "    return data, label\n",
    "\n",
    "\n",
    "data, label = get_data()\n",
    "#selectedFeatureList = [0, 1, 61, 62]\n",
    "#data = data[selectedFeatureList]\n",
    "#data_columns = data.shape[1]\n",
    "#data.columns = np.arange(0, data_columns)\n",
    "\n",
    "data.describe().to_excel(\"./data_description_before.xlsx\")\n",
    "\n",
    "# forward-fill\n",
    "data = data.fillna(method=\"ffill\", axis=0)\n",
    "data.describe().to_excel(\"./data_description_after.xlsx\")\n",
    "\n",
    "scaler = StandardScaler()\n",
    "data = scaler.fit_transform(data)\n",
    "\n",
    "data = np.array(data)\n",
    "label = np.array(label)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data, label, test_size=0.2)\n",
    "n_samples, n_features = X_train.shape\n",
    "\n",
    "\n",
    "def toOneHot(label):\n",
    "    enc = OneHotEncoder()\n",
    "    enc.fit(label)\n",
    "    label = enc.transform(label).toarray()\n",
    "    return label\n",
    "\n",
    "\n",
    "y_train = toOneHot(y_train)\n",
    "y_test = toOneHot(y_test)\n",
    "\n",
    "\n",
    "def create_model():\n",
    "\n",
    "    adam = Adam(lr=0.0002,\n",
    "                beta_1=0.9,\n",
    "                beta_2=0.999,\n",
    "                epsilon=1e-08,\n",
    "                amsgrad=True)\n",
    "\n",
    "    model = Sequential()\n",
    "    model.add(Dense(512, activation='relu', input_shape=(n_features, )))\n",
    "    model.add(Dropout(0.2))\n",
    "    model.add(Dense(512, activation='relu'))\n",
    "    model.add(Dropout(0.2))\n",
    "    model.add(Dense(128, activation='relu'))\n",
    "    model.add(Dropout(0.2))\n",
    "    model.add(Dense(10, activation='relu'))\n",
    "    model.add(Dense(5))\n",
    "    model.add(Activation('softmax'))\n",
    "    model.compile(loss='categorical_crossentropy',\n",
    "                  optimizer=adam,\n",
    "                  metrics=['accuracy'])\n",
    "\n",
    "    return model\n",
    "\n",
    "\n",
    "model = create_model()\n",
    "\n",
    "with open('Model_Architecture.txt', 'w') as f:\n",
    "    with redirect_stdout(f):\n",
    "        model.summary()\n",
    "\n",
    "callbacks = [\n",
    "    EarlyStopping(monitor='val_acc',\n",
    "                  min_delta=0.00001,\n",
    "                  patience=6,\n",
    "                  verbose=0,\n",
    "                  mode='max',\n",
    "                  restore_best_weights=False),\n",
    "    ModelCheckpoint(filepath='./best_model.h5',\n",
    "                    monitor='val_acc',\n",
    "                    mode=\"max\",\n",
    "                    save_weights_only=False,\n",
    "                    save_best_only=True)\n",
    "]\n",
    "\n",
    "history = model.fit(X_train,\n",
    "                    y_train,\n",
    "                    batch_size=120,\n",
    "                    epochs=160,\n",
    "                    verbose=0,\n",
    "                    validation_split=0.2,\n",
    "                    callbacks=callbacks)\n",
    "\n",
    "#model.save(\"./best_model.h5\")\n",
    "\n",
    "training_score, training_accuracy = model.evaluate(X_train, y_train, verbose=0)\n",
    "test_score, test_accuracy = model.evaluate(X_test, y_test, verbose=0)\n",
    "with open('output.txt', 'w') as f:\n",
    "    with redirect_stdout(f):\n",
    "        print('Training score:', training_score)\n",
    "        print('Training accuracy:', training_accuracy)\n",
    "        print('Test score:', test_score)\n",
    "        print('Test accuracy:', test_accuracy)\n",
    "\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='val')\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.title(\"Loss\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.savefig(\"./loss.png\")\n",
    "plt.show()\n",
    "\n",
    "plt.plot(history.history['accuracy'], label='train')\n",
    "plt.plot(history.history['val_accuracy'], label='val')\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.title(\"Accuracy\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.savefig(\"./accuracy.png\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
